package com.ly.heart.mapper;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ly.heart.domain.KingInvoicePayableDetailEntity;
import com.ly.heart.domain.dto.KingInventoryMaterialQueryDto;
import com.ly.heart.domain.dto.KingOrderMaterialQueryDto;
import com.ly.heart.domain.dto.KingProcureRefundMaterialQueryDto;
import com.ly.heart.domain.dto.KingProcureRefundQueryDto;
import com.ly.heart.domain.vo.OrderSumResult;

/**
 * 金蝶-发票-应付单/采购开票明细Mapper接口
 * @author wutao
 * @date 2024-06-26
 */
public interface KingInvoicePayableDetailMapper extends BaseMapper<KingInvoicePayableDetailEntity> {
    /**
     * 查询金蝶-发票-应付单/采购开票明细
     * @param id 金蝶-发票-应付单/采购开票明细ID
     * @return 金蝶-发票-应付单/采购开票明细
     */
    KingInvoicePayableDetailEntity selectKingInvoicePayableDetailEntityById (String id);

    /**
     * 查询金蝶-发票-应付单/采购开票明细列表
     * @param kingInvoicePayableDetailEntity 金蝶-发票-应付单/采购开票明细
     * @return 金蝶-发票-应付单/采购开票明细集合
     */
    List<KingInvoicePayableDetailEntity> selectKingInvoicePayableDetailEntityList (KingInvoicePayableDetailEntity kingInvoicePayableDetailEntity);

    /**
     * 新增金蝶-发票-应付单/采购开票明细
     * @param kingInvoicePayableDetailEntity 金蝶-发票-应付单/采购开票明细
     * @return 结果
     */
    int insertKingInvoicePayableDetailEntity (KingInvoicePayableDetailEntity kingInvoicePayableDetailEntity);

    /**
     * 修改金蝶-发票-应付单/采购开票明细
     * @param kingInvoicePayableDetailEntity 金蝶-发票-应付单/采购开票明细
     * @return 结果
     */
    int updateKingInvoicePayableDetailEntity (KingInvoicePayableDetailEntity kingInvoicePayableDetailEntity);

    /**
     * 删除金蝶-发票-应付单/采购开票明细
     * @param id 金蝶-发票-应付单/采购开票明细ID
     * @return 结果
     */
    int deleteKingInvoicePayableDetailEntityById (String id);

    /**
     * 批量删除金蝶-发票-应付单/采购开票明细
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteKingInvoicePayableDetailEntityByIds (String[] ids);

    /**
     * 【采购订单列表调用】根据采购订单id和物料id查询集合
     * @param queryDto
     * @return
     */
    List<KingInvoicePayableDetailEntity> selectMaterialByOrderIdAndMaterialId(KingOrderMaterialQueryDto queryDto);

    /**
     * 【采购订单列表调用】根据采购订单id和物料id查询提前开票物料集合
     * @param queryDto
     * @return
     */
    List<KingInvoicePayableDetailEntity> selectAdvanceMaterialByOrderIdAndMaterialId(KingOrderMaterialQueryDto queryDto);

    /**
     * 【采购订单列表调用】根据采购订单id和物料id查询物料开票总数
     * @param queryDto
     * @return
     */
    OrderSumResult getNumAndTotalTaxPriceByOrder(KingOrderMaterialQueryDto queryDto);

    /**
     * 【采购订单列表调用】根据采购订单id和物料id查询提前开票物料集合
     * @param queryDto
     * @return
     */
    OrderSumResult getAdvanceNumAndTotalTaxPriceByOrder(KingOrderMaterialQueryDto queryDto);

    /**
     *【采购入库单调用】根据采购入库单id和物料明细id查询累计应付数量以及累计应付价税合计(这里未包含财务红冲单)
     * @param queryDto
     * @return
     */
    OrderSumResult getNumAndTotalTaxPriceByInventory(KingInventoryMaterialQueryDto queryDto);

    /**
     *【采购入库单调用】根据采购入库单id和物料明细id查询关联的应付单集合，用于计算财务红冲单
     * @param queryDto
     * @return
     */
    List<KingInvoicePayableDetailEntity> getInvoicePayableDetailListByInventory(KingInventoryMaterialQueryDto queryDto);

    /**
     * 【采购退料单调用】根据采购退料单id和物料id查询该物料开票总数
     * @param queryDto
     * @return
     */
    OrderSumResult getNumAndTotalTaxPriceByProcureRefund(KingProcureRefundMaterialQueryDto queryDto);

    /**
     * 【采购退料单调用】根据采购退料单的源单id和源物料明细id查询源单累计金额和价税合计
     * @param queryDto
     * @return
     */
    OrderSumResult getParentAmountMoneyAndTotalTaxPriceByProcureRefund(KingInventoryMaterialQueryDto queryDto);
}
